import { validateCanGetRefreshToken } from "../utils/authService";

function request(options) {
  const token = wx.getStorageSync("token");
  const expiresTime = wx.getStorageSync("expiresTime");
  const refreshToken = wx.getStorageSync("refreshToken");

  const defaultHeader = {
    "Authorization": token ? `Bearer ${token}` : "",
    "tenant-id": 156,
    "login_user_type":3
  };
  // 返回一个新的 Promise 对象
  return new Promise((resolve, reject) => {
    // 验证 token 是否过期，如果过期则刷新 token
    validateCanGetRefreshToken(refreshToken, expiresTime).then((newToken) => {
      if (newToken) {
        defaultHeader["Authorization"] = `Bearer ${newToken}`;
      }
      // 合并用户自定义的 header 和默认 header
      options.header = { ...defaultHeader, ...options.header };

      // 执行 wx.request
      wx.request({
        ...options,
        success: (res) => {
          if (res.statusCode === 200) {
            // 请求成功，使用 resolve 传递数据
            resolve(res.data);
          } else {
            // 服务器返回的状态码不是 200，使用 reject 传递错误信息
            reject(new Error("Server responded with a non-200 status code"));
          }
        },
        fail: (err) => {
          // 网络请求失败，使用 reject 传递错误信息
          reject(err);
        },
      });
    });
  });
}

export default request;
